package com.qingcheng.controller;


import com.alibaba.dubbo.config.annotation.Reference;
import com.qingcheng.pojo.order.Order;
import com.qingcheng.service.order.OrderService;
import com.qingcheng.service.pay.WeixinPayService;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

@RestController
@RequestMapping("/wxpay")
public class PayController {


    @Reference
    private OrderService orderService;

    @Reference
    private WeixinPayService weixinPayService;


    /**
     * 创建二维码
     * @param orderId
     * @return
     */
    @GetMapping("/createNative")
    public Map createNative(String orderId){

        String username = SecurityContextHolder.getContext().getAuthentication().getName();

        Order order = orderService.findById(orderId);
        if(order!=null){

            if("0".equals(order.getPayStatus())  && "0".equals(order.getOrderStatus()) &&  username.equals(order.getUsername()) ){
                return  weixinPayService.createNative(orderId,order.getPayMoney(),"http://lemontree.easy.echosite.cn/wxpay/notify.do");

            }else{
                return null;
            }

        }else{

            return null;
        }


    }

    @RequestMapping("/notify")
    public void notifyLogic(HttpServletRequest request){

        System.out.println("支付回调成功");

        //微信支付平台发送给回调地址的是二进制流，需要提取二进制流转换为字符串
        try {
            InputStream inputStream = (InputStream)request.getInputStream();
            ByteArrayOutputStream outputStream =new ByteArrayOutputStream();

            byte[] buffer =new byte[1024];
            int len= 0;
            while ((len=inputStream.read(buffer))!=-1){  //读写操作
                outputStream.write(buffer,0,len);
            }
            outputStream.close();
            inputStream.close();
            //提取二进制流转换为XML字符串
            String result = new String(outputStream.toByteArray(),"utf-8");
            System.out.println(result);
            //支付回调操作
            weixinPayService.notifyLogic(result);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }


}
